/***************************************************************************//**
 * @file     csa37f7x_wwdt.h
 * @version  V1.0.0
 * @author   cs2040
 * @date     2020-09-26 PM
 * @brief    该文件包含了WWDT各功能参数的定义和函数接口声明
 * 
 * @copyright Copyright (C) 2020 Chipsea Technologies Corp. All rights reserved.
 ****************************************************************************
 * @attention
 *  硬件平台: CSA37F70 评估板V1.0 \n
 *  SDK版本： CSA37F7X_SDK_1.0.0
 * 
 * @par 修改日志:
 * <table>
 * <tr><th>Date        <th>Version  <th>Author    <th>Description
 * <tr><td>2020-09-26  <td>1.0.0    <td>Chipsea MCU Group  <td>创建初始版本
 * </table>
 *
 *****************************************************************************/

#ifndef __CSA37F7X_WWDT_H__
#define __CSA37F7X_WWDT_H__

// Include external header file.
#include "csa37f7x.h"

#ifdef __cplusplus
extern "C" {
#endif

/** @addtogroup WWDT 窗口看门狗(WWDT)
  系统窗口看门狗(WWDG)模块通常被用来监测，由于外部干扰或者不可预见的逻辑条件造成的应
用程序背离正常的运行序列而产生的软件故障。除递减计数器的值 T6 位变为 0 之前被刷新，看门狗电
路在达到预置的时间周期时，会产生一个 MCU 复位。<br>
###特性: 
    - 可编程自由运行递减。
    - 当递减计数器的值小于 0x40，（若看门狗被启动）则产生复位。
    - 当递减计数器在窗口外被重载，（若看门狗被启动）则产生复位。
    - 提前唤醒中断(EWI)：当窗看门狗使能且递减计数器的值等于 0x40。
  @{
*/


/**
* @brief  看门狗时钟分频
*/
typedef enum
{
    WWDT_CLK_PRESCALE_1 = 0x00,                                 /*!<看门狗计数器时钟不分频  */ 
    WWDT_CLK_PRESCALE_2 = 0x01,                                 /*!<看门狗计数器时钟2分频  */ 
    WWDT_CLK_PRESCALE_4 = 0x02,                                 /*!<看门狗计数器时钟4分频  */ 
    WWDT_CLK_PRESCALE_8 = 0x03,                                 /*!<看门狗计数器时钟8分频  */
}wwdt_clk_prescale_t;

/**
* @brief  看门狗配置结构体
*/
typedef struct
{
    wwdt_clk_prescale_t wwdt_clk_prescale;                      /*!<看门狗时钟分频选择  */ 
    enable_state_t wwdt_early_wake_up_interrupt;                /*!<提前提醒中断使能  */ 
    uint32_t wwdt_timer_upper_limit_value;                      /*!<递减计数器的时间窗上限值  */ 
} wwdt_config_t;

/**@brief		    窗口看门狗初始化
 *
 * @param[in]	    p_wwdt_config     看门狗配置结构体
 * @return		    无
*/
void wwdt_init ( wwdt_config_t *p_wwdt_config);

/**@brief		    开启窗口看门狗
 *
 * @return		    无
*/
void wwdt_enable ( void);

/**@brief		    设置窗口看门狗重装载值
 *
 * @param[in]	    wwdt_reload_data     窗口看门狗重装载值
 * @return		    无
*/
void wwdt_reload_data_set (uint8_t wwdt_reload_data);

/**@brief		    窗口看门狗清除中断
 *
 * @return		    无
*/
void wwdt_int_clear(void);

#ifdef __CSA37F70__
/**@brief		    窗口看门狗最长复位时间（复位时间524s，一般调试用）
 *
 * @return		    无
*/
void wdt_init_longest_reset_time(void);
#endif

/*@}*/ /* end of group WWDT */

#ifdef __cplusplus
}
#endif

#endif  //__CSA37F7X_WWDT_H__


/*** (C) COPYRIGHT 2020 Chipsea Technologies (Shenzhen) Corp. ***/
